package cn.abyss.admin.util;

import java.text.ParseException;
import java.util.Date;

/**
 * 一些数据验证的方法
 */
public class AbyssAdminDataValidator {
	private AbyssAdminDataValidator(){}
	
	/**
	 * 数值比较：是否等于0
	 * @param value
	 * @return
	 */
	public static boolean eqZero(Long value){
		if(value == null) return true;
		return value.longValue() == 0L;
	}
	/**
	 * 数值比较：是否小于等于0
	 * @param value
	 * @return
	 */
	public static boolean leZero(Long value){
		if(value == null) return true;
		return value.longValue() <= 0L;
	}
	/**
	 * 数值比较：是否小于0
	 * @param value
	 * @return
	 */
	public static boolean ltZero(Long value){
		if(value == null) return true;
		return value.longValue() < 0L;
	}
	/**
	 * 日期比较：是否小于今天
	 * @param date
	 * @return
	 */
	public static boolean ltToday(Date date){
		return AbyssAdminDateUtil.getIntervalDaysFromToday(date) < 0;
	}
	/**
	 * 日期比较：是否小于等于今天
	 * @param date
	 * @return
	 */
	public static boolean leToday(Date date){
		return leTheDay(date, 0L);
	}
	/**
	 * 日期比较：是否在某几天之内
	 * @param date
	 * @return
	 */
	public static boolean leTheDay(Date date, long theDay){
		return AbyssAdminDateUtil.getIntervalDaysFromToday(date) <= theDay;
	}
	/**
	 * 是否为空的Id（Long类型）
	 * @param id
	 * @return
	 */
	public static boolean isEmptyId(Long id){
		return eqZero(id);
	}
	/**
	 * 是否年月格式的值
	 * @param period
	 * @return
	 */
	public static boolean isYearMonth(String period){
		try{
			AbyssAdminDateUtil.parse(period, AbyssAdminConstants.YEARMONTH_PATTERN);
			return true;
		}catch (ParseException pe) { 
			return false;
        } 
	}
	/**
	 * 字符串比较：null和Empty认为是相等的。
	 * @param s1
	 * @param s2
	 * @return
	 */
	public static boolean generalEquals(String s1, String s2){
		if(s1 != null && s2 != null){
			return s1.equals(s2);
		}
		if(s1 == null && s2 == null){
			return true;
		}
		if(s1 != null){
			return s1.isEmpty();
		}else{
			return s2.isEmpty();
		}
	}
	
	/**
	 * 检查是否邮件格式
	 * @param email
	 * @return
	 */
	public static boolean isEmail(String email){
		if(email == null || email.length() == 0){
			return false;
		}
		if(email.matches("^[a-z0-9A-Z]+[-|a-z0-9A-Z._]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$")){
			return true;
		}
		return false;
	}
	
	/**
	 * 检查是否手机号格式
	 * @param mobilePhone
	 * @return
	 */
	public static boolean isMobilePhone(String mobilePhone){
		if(mobilePhone == null || mobilePhone.length() == 0){
			return false;
		}
		if(mobilePhone.matches("^1[3|4|5|6|7|8|9][0-9]\\d{8}$")){
			return true;
		}
		return false;
	}
	
	/**
	 * 校验是否是固定电话号
	 * @param fixedPhone
	 * @return
	 */
	public static boolean isTelePhone(String fixedPhone){
		String regex = "^0([0-9]{2,3}-?[0-9]{7,8}-[0-9]{1,4})$";
		String regex1 = "^0([0-9]{2,3}-?[0-9]{7,8})$";
		if(fixedPhone == null || fixedPhone.length() == 0){
			return false;
		}
		if(fixedPhone.matches(regex) || fixedPhone.matches(regex1)){
			return true;
		}
		return false;
	}
}
